﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using HerGoS.Documentos.Entities;
using HerGoS.ControlsUI;
using HerGoS.WebControlExtend;
using HerGoS.Documentos.Engine;

namespace HerGoS.WebUI.Documentos
{
    public partial class Documentos_Listado : PageBase
    {
        #region Propiedades
        public List<Documento> Documentos
        {
            get
            {
                if (ViewState["Documento"] != null)
                    return (List<Documento>)ViewState["Documento"];
                return null;
            }
            set
            {
                ViewState["Documento"] = value;
            }

        }
        #endregion

        #region EvalNumero

        protected string GetNumero()
        {
            return " " + Eval("Numero") + "/" + Eval("Ano") + "-" + Eval("Copia");

        }


        #endregion

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!Page.IsPostBack)
            {
                Initialize();
                LoadGridDocumento(false);

                this.cboTipoDocumento.DataSource = GestorTipoDocumentos.Consultar();
                cboTipoDocumento.DataTextField = "Descripcion";
                cboTipoDocumento.DataValueField = "OID";
                cboTipoDocumento.DataBind();
                cboTipoDocumento.Items.Insert(0, new ListItem("--Todos-- ", "0"));
            }
        }

        void Initialize()
        {
            this.GridDocumentos.Settings(new GridViewExtBasic());
            this.btnNuevo.Settings(new ButtonExtText());
            this.btnRefresh.Settings(new ButtonExtText());
            this.btnFiltrar.Settings(new ButtonExtText());
            this.bntQuitarFiltros.Settings(new ButtonExtText());          
        }

        private void LoadGridDocumento(bool cache)
        {
            if (!cache)
                this.Documentos = GestorDocumentos.Consultar();
            this.GridDocumentos.DataSource = Documentos;
            this.GridDocumentos.DataBind();
        }

        protected void btnRefresh_Click(object sender, EventArgs e)
        {
            LoadGridDocumento(false);
        }



        protected void btnBorrar_Click(object sender, EventArgs e)
        {
            ImageButton btn = (ImageButton)sender;
            int index = Convert.ToInt32(btn.CommandArgument);
            int id = Convert.ToInt32(this.GridDocumentos.DataKeys[index].Value);

            Documento documento = Documentos.Find(c => c.OID == id);
            Documentos.Remove(documento);

            GestorDocumentos.Eliminar(documento);
            LoadGridDocumento(true);

        }

        protected void GridDocumentos_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                ImageButtonExt Editar = e.Row.FindControl("btnEditar") as ImageButtonExt;
                if (Editar != null)
                {
                    Editar.Settings(new ImageButtonExtEdit());
                    int oid = DataBinder.Eval(e.Row.DataItem, "OID").ToInteger();
                    Editar.OnClientClick = "Editar(" + oid.ToString() + "); return false;";
                }

                ImageButtonExt Borrar = e.Row.FindControl("btnBorrar") as ImageButtonExt;
                if (Borrar != null)
                {
                    Borrar.Settings(new ImageButtonExtDelete());
                }
            }
        }

        protected void GridDocumentos_PageIndexChanging(Object sender, GridViewPageEventArgs e)
        {
            this.GridDocumentos.PageIndex = e.NewPageIndex;
            LoadGridDocumento(true);
        }



        protected void btnFiltrar_Click(object sender, EventArgs e)
        {
            List<Documento> filtroResult = Documentos;
            
            if (!string.IsNullOrEmpty(this.txtNumeroLegajo.Text) && !string.IsNullOrEmpty(this.txtAnioLegajo.Text) )
            {
                filtroResult = filtroResult.FindAll(y => y.LegajoDocumento != null).FindAll(y => y.LegajoDocumento.Numero == Convert.ToInt32(this.txtNumeroLegajo.Text) && y.LegajoDocumento.Ano == Convert.ToInt32(this.txtAnioLegajo.Text)
                    && y.LegajoDocumento.Copia == Convert.ToInt32(this.txtCopiaLegajo.Text));
            }
          


            //if (!string.IsNullOrEmpty(this.txtNumeroLegajo.Text))
            //{
            //    filtroResult = filtroResult.FindAll(y => y.LegajoDocumento.OID == this.txtNumeroLegajo.Text.ToInteger());

            //}
                       
            //se filtra numero año y copia.
            if (!string.IsNullOrEmpty(this.txtNumeroDocumento.Text)  && !string.IsNullOrEmpty(this.txtAnio.Text)  )
            {
                filtroResult = filtroResult.FindAll(y => y.Numero == Convert.ToInt32(this.txtNumeroDocumento.Text) && y.Ano == Convert.ToInt32(this.txtAnio.Text)
                    && y.Copia == Convert.ToInt32(this.txtCopia.Text));
                   
            }

             //por tipo aislado
            if ((cboTipoDocumento.SelectedValue.ToInteger() != 0))
            {

                filtroResult = filtroResult.FindAll(y => y.TipoDocumento.OID == cboTipoDocumento.SelectedValue.ToInteger());
            }


            if (!string.IsNullOrEmpty(this.txtApyNombre.Text))
                filtroResult = filtroResult.FindAll(y => y.PersonaFirmante != null).FindAll(y => y.PersonaFirmante.NombresYApellidos.ToLower().Contains(this.txtApyNombre.Text.ToLower()));


            if (!string.IsNullOrEmpty(this.txtDescripcion.Text))
            {
                filtroResult = filtroResult.FindAll(y => y.Descripcion.ToLower().Contains(this.txtDescripcion.Text.ToLower()));

            }

            if (!string.IsNullOrEmpty(this.txtFechaDesde.Text) && !string.IsNullOrEmpty(this.txtFechaHasta.Text) )
            {
                filtroResult = filtroResult.FindAll(y => y.FechaExterna >= this.txtFechaDesde.Text.ToDateTime() && y.FechaExterna <= this.txtFechaHasta.Text.ToDateTime());

            }

            if (!string.IsNullOrEmpty(this.txtFechaDesde.Text) && string.IsNullOrEmpty(this.txtFechaHasta.Text))
            {
                filtroResult = filtroResult.FindAll(y => y.FechaExterna >= this.txtFechaDesde.Text.ToDateTime());
            }


            if (!string.IsNullOrEmpty(this.txtFechaHasta.Text) && string.IsNullOrEmpty(this.txtFechaDesde.Text))
            {
                filtroResult = filtroResult.FindAll(y => y.FechaExterna <= this.txtFechaHasta.Text.ToDateTime());
            }

            if (!string.IsNullOrEmpty(this.txtEntidadIniciadora.Text))
            {
                filtroResult = Documentos.FindAll(y => y.Entidad != null).FindAll(y => y.Entidad.Denominacion.ToLower().Contains(this.txtEntidadIniciadora.Text.ToLower()));

            }


            this.GridDocumentos.DataSource = filtroResult;
            this.GridDocumentos.DataBind();
        }
        protected void btnQuitarFiltros_Click(object sender, EventArgs e)
        {
            this.txtApyNombre.Text = string.Empty;
            this.txtNumeroDocumento.Text = string.Empty;
            this.txtAnio.Text = "2014";
            this.txtCopia.Text = "0";
             
            this.txtDescripcion.Text = string.Empty;
            this.cboTipoDocumento.SelectedValue = "0";

            this.txtFechaDesde.Text = string.Empty;
            this.txtFechaHasta.Text = string.Empty;
            this.txtNumeroLegajo.Text = string.Empty;
            this.txtEntidadIniciadora.Text = string.Empty;
            LoadGridDocumento(true);

        }

    }
}